package uade.distribuidas.server.domain;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import uade.distribuidas.repo.dto.ClienteDTO;
import uade.distribuidas.repo.dto.CondicionVentaDTO;
import uade.distribuidas.repo.type.CondicionIvaType;
import uade.distribuidas.repo.type.EstadoType;




@Entity
@Table(name="clientes")
public class Cliente {


	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="idcliente")
	private Integer id;
	
	private String cuil;
	
	private String razonSocial;
	
	@Column(name="domicilio")
	private String domicilio;
	
	@Column(name="telefono")
	private String telefono;
	
	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinTable(name = "clientes_condiciones",
	joinColumns = { 
			@JoinColumn(name = "idcliente", nullable = false, updatable = false) 
			}, 
	inverseJoinColumns = { 
			@JoinColumn(name = "idcondicion",nullable = false, updatable = false) 
			}
	)
	private List<CondicionVenta> condicionesVenta;
	
	@Column(name="estado",columnDefinition = "varchar(20) default 'ACTIVO'")
	@Enumerated(EnumType.STRING) 
	private EstadoType estado;
	
	
	@Enumerated(EnumType.STRING)
	private CondicionIvaType condicionIva;
	
    
    public Cliente() {
    	super();
    }
    
	public List<CondicionVenta> getCondicionesVenta() {
		return condicionesVenta;
	}
	public void setCondicionesVenta(List<CondicionVenta> condicionesVenta) {
		this.condicionesVenta = condicionesVenta;
	}
	public String getCuil() {
		return cuil;
	}
	public void setCuil(String cuil) {
		this.cuil = cuil;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getRazonSocial() {
		return razonSocial;
	}
	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}

	public String getDomicilio() {
		return domicilio;
	}

	public void setDomicilio(String domicilio) {
		this.domicilio = domicilio;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public EstadoType getEstado() {
		return estado;
	}

	public void setEstado(EstadoType estado) {
		this.estado = estado;
	}

	public CondicionIvaType getCondicionIva() {
		return condicionIva;
	}

	public void setCondicionIva(CondicionIvaType condicionIva) {
		this.condicionIva = condicionIva;
	}
    
    public ClienteDTO getVista(){
    	ClienteDTO cdto = new ClienteDTO();
		//TEnes q convertir las condificiones de venta a dto...
    	List<CondicionVentaDTO> ventas=new ArrayList<CondicionVentaDTO>();
    	for(CondicionVenta c:this.getCondicionesVenta()){
    		ventas.add(c.getVista());
    	}
		cdto.setCondicionesVenta(ventas);
		cdto.setCondicionIva(this.getCondicionIva());
		cdto.setCuil(this.getCuil());
		cdto.setDomicilio(this.getDomicilio());
		cdto.setEstado(this.getEstado());
		cdto.setId(this.getId());
		cdto.setRazonSocial(this.getRazonSocial());
		cdto.setTelefono(this.getTelefono());
		
		return cdto;
    }
}
